package Array;

public class SuperLink {
    Node head; //定义一个头
    int DQindex = -1;

    //增加
    public void addToHeader(int data) {
        this.add(0, data);
    }

    public void addToTail(int data) {
        this.add(DQindex + 1, data);

    }


    //按照指定下标插入
    public void add(int index, int data) {
        if (head == null) {
            head = new Node(data, null);

        } else {
            if (index == 0) {
                Node node = new Node(data, head);
                head = node;
            } else {
                Node node = newselect(index - 1);
                Node newNode = new Node(data, node.getNext());
                node.setNext(newNode);
            }
        }
        DQindex++;
    }


    public void del(int index) {
        if (index == 0) {
           head = head.getNext();
            DQindex--;
        } else {
            Node node = newselect(index - 1);
            node.setNext(node.getNext().getNext());
            DQindex--;
        }
    }


    public void set(int index, int data) {
        newselect(index).setData(data);
    }


    public int select(int index) {

        return newselect(index).getData();
    }

    public Node newselect(int index) {
        Node node = head;
        for (int i = 0; i < index; i++) {
            node = node.getNext();
        }
        return node;

    }

    public int size() {
        return DQindex++;
    }

    public String print() {
        String res = "[";
        for (int i = 0; i <= DQindex; i++) {
            res += select(i) + ",";
        }
        return res.substring(0, res.length() - 1) + "]";
    }

    //1000个数据排序用了867毫秒
    public void px() {
        for (int i = 0; i < DQindex; i++) {
            for (int j = 0; j < DQindex - i; j++) {
                if (select(j) > select(j + 1)) {
                    int temp = select(j);
                    newselect(j).setData(newselect(j + 1).getData());
                    newselect(j + 1).setData(temp);
                }
            }
        }
    }

    //1000个数据排序用了197毫秒
    public void px2() {
        for (int i = 0; i < DQindex; i++) {
            for (int j = 0; j < DQindex - i; j++) {
                Node node = newselect(j);
                Node next = node.getNext();
                if (node.getData() > next.getData()) {
                    int temp = node.getData();
                    node.setData(next.getData());
                    next.setData(temp);
                }
            }
        }
    }

    //1000个数据排序用了13毫秒
    public void px3() {
        Node node = null;
        for (int i = 0; i < DQindex; i++) {
            for (int j = 0; j < DQindex - i; j++) {
                if (j == 0) {
                    node = head;
                } else {
                    node = node.getNext();
                }
                Node next = node.getNext();
                if (node.getData() > next.getData()) {
                    int temp = node.getData();
                    node.setData(next.getData());
                    next.setData(temp);
                }
            }
        }
    }

}
